/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package edu.upc.embajada.dao.impl;

import edu.upc.embajada.dao.SolicitudDao;
import edu.upc.embajada.entity.Cita;
import edu.upc.embajada.entity.Solicitud;
import java.util.Date;
import java.util.List;
import javax.sql.DataSource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.simple.SimpleJdbcDaoSupport;
import org.springframework.stereotype.Repository;

/**
 *
 * @author u02728
 */
@Repository
public class SolicitudDaoImpl extends SimpleJdbcDaoSupport implements SolicitudDao {

    private static Logger log = LoggerFactory.getLogger(SolicitudDaoImpl.class);

    @Autowired
    public SolicitudDaoImpl(DataSource dataSource) {
        log.info("Asignando el dataSource");
        setDataSource(dataSource);
    }

    @Override
    public Integer crear(Solicitud solicitud) {
        getJdbcTemplate().update(
                "insert into solicitud (docIdentidad, nombre, apellidoPaterno, apellidoMaterno, fechaNac, sexo, direccion,"
                + "       idDistrito, casapropia, telefono1, telefono2, correo, ingresoMensual, placa1, placa2, placa3, "
                + "       RUC_empresa, fecSolicitud, score, idUsuarioEvaluador, fecEntrevista,  horaEntrevista, idEstado) "
                + " values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",
                solicitud.getDocIdentidad(), solicitud.getNombre(), solicitud.getApellidoPaterno(), solicitud.getApellidoMaterno(), solicitud.getFechaNac(), solicitud.getSexo(), solicitud.getDireccion(),
                solicitud.getIdDistrito(), solicitud.getCasapropia(), solicitud.getTelefono1(), solicitud.getTelefono2(), solicitud.getCorreo(), solicitud.getIngresoMensual(), solicitud.getPlaca1(), solicitud.getPlaca2(), solicitud.getPlaca3(),
                solicitud.getRUC_empresa(), solicitud.getFecSolicitud(), solicitud.getScore(), solicitud.getIdUsuarioEvaluador(), solicitud.getFecEntrevista(), solicitud.getHoraEntrevista(), solicitud.getIdEstado());
        return getSimpleJdbcTemplate().queryForInt("select last_insert_id()");
    }

    @Override
    public Solicitud obtener(Integer id) {
        try {
            return getSimpleJdbcTemplate().queryForObject(
                    "select * from solicitud where idSolicitud = ?",
                    new BeanPropertyRowMapper<Solicitud>(Solicitud.class), id);
        } catch (EmptyResultDataAccessException e) {
            return null;
        }
    }

    @Override
    public List<Solicitud> obtenerTodos() {
        return getSimpleJdbcTemplate().query(
                "select * from solicitud",
                new BeanPropertyRowMapper<Solicitud>(Solicitud.class));
    }

    @Override
    public List<Solicitud> obtenerPorUsuario(String codEmpleado) {
        return getSimpleJdbcTemplate().query(
                "select a.* from solicitud a, usuario b where a.idUsuarioEvaluador = b.idUsuario and b.codEmpleado = ? and idEstado >= 2",
                new BeanPropertyRowMapper<Solicitud>(Solicitud.class), codEmpleado);
    }

    @Override
    public List<Solicitud> obtenerPorUsuarioFecha(String codEmpleado, Date fecha) {

        return getSimpleJdbcTemplate().query(
                "select a.* from solicitud a, usuario b where a.idUsuarioEvaluador = b.idUsuario and b.codEmpleado = ? and fecEntrevista = ? and idEstado >= 2 order by horaEntrevista",
                new BeanPropertyRowMapper<Solicitud>(Solicitud.class), codEmpleado, fecha);
    }

    @Override
    public void cambiaEstado(int idSolicitud, int idEstado) {
        getJdbcTemplate().update(
                "update solicitud set idEstado = ? where idSolicitud = ?",
                idEstado, idSolicitud);
    }

    @Override
    public Cita obtenerSiguienteCita(int idEvaluador) {
        return getSimpleJdbcTemplate().queryForObject(
                "select fecEntrevista as fecha , addtime(hora, '01:00:00') as hora "
                + "from (select  fecEntrevista, max(horaEntrevista) as hora from solicitud "
                + "where idUsuarioEvaluador = ? group by fecEntrevista "
                + "order by 2 ASC) a",
                new BeanPropertyRowMapper<Cita>(Cita.class), idEvaluador);
       
    }
        
    @Override
    public int obtenerEvaluador() {

        return getSimpleJdbcTemplate().queryForInt(
                "Select idUsuarioEvaluador from (select  idUsuarioEvaluador, count(*) from solicitud group by idUsuarioEvaluador order by 2 ASC) a limit 1");

    }
}
